<?php 
use app\wechat\model\Wechat;

/**
 * 是否微信访问
 * @return bool
 * @author 心云间、凝听<981248356@qq.com>
 */
function is_weixin() {
    if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false ) {
        return true;
    } else {
        return false;
    }
}

/**
 * 获取微信资源对象
 * @param  string $wxid 微信ID
 * @return [type] [description]
 * @date   2017-08-22
 * @author 赵俊峰 <981248356@qq.com>
 */
function get_wechat_object($wxid ='') {
    $weixin_info = get_wechat_info($wxid);
    $options = [
        'token'          => $weixin_info['valid_token'], //填写你设定的key
        'encodingaeskey' => $weixin_info['encodingaeskey'], //填写加密用的EncodingAESKey，如接口为明文模式可忽略
        'appid'          => $weixin_info['appid'], //填写高级调用功能的app id, 请在微信开发模式后台查询
        'appsecret'      => $weixin_info['appsecret'] //填写高级调用功能的密钥
    ];
    $wechatObj = new \wechat\TPWechat($options);
    $wechatObj->getRev();
    return $wechatObj;
}

/**
 * 获取指定公众号信息
 * @param  string $wxid 微信ID
 * @return [type] [description]
 * @date   2017-08-22
 * @author 赵俊峰 <981248356@qq.com>
 */
function get_wechat_info($wxid = '') {
    if (empty($wxid)) {
        $wxid = get_wxid();
    }
    $wechat_model = new Wechat;
    $wechat_info = $wechat_model->getWechatInfo($wxid);
    return $wechat_info;
}

/**
 * 设置/获取用户标识
 * @param  string $openid 如果为空则返回当前用户标识
 * @return [type] [description]
 * @date   2017-08-22
 * @author 赵俊峰 <981248356@qq.com>
 */
function get_openid($openid = '') {
    $token = get_wechat_token();                     
    if (empty($token)) {                         // 如果公众号标识不存在
        return null;
    }
    if ($openid) {                              // 设置当前用户标识
        session('openid_'.$token, $openid);
    } elseif (input('openid')) {                    // 如果浏览器带有openid参数，则缓存用户标识
        session('openid_'.$token, input('openid'));
    }
    $openid = session('openid_'.$token); // 获取当前用户标识
    if (empty($openid)) {
        return null;
    }
    return $openid;
}

/**
 * 设置/获取当前公众号标识
 * @param  integer $wxid 如果为空则获取当前公众号标识
 * @return [type] [description]
 * @date   2017-08-22
 * @author 赵俊峰 <981248356@qq.com>
 */
function get_wxid($wxid = 0) {
    if ($wxid>0) { // 手动设置当前公众号
        session('wxid', intval($wxid));
        session('wx_token', Wechat::where(['id'=>$wxid])->value('token'));
    } elseif (input('wxid')) {                  
        // 如果浏览器中带有公众号标识，则设置为当前公众号
        session('wxid', intval(input('wxid')));   
        session('wx_token', Wechat::where(['id'=>input('wxid')])->value('token'));      
    }
    
    return $wxid;
}

/**
 * 设置/获取当前公众号标识
 * @author 心云间、凝听<981248356@qq.com>
 */
function get_wechat_token($token = '') {

    if ($token) {
        session('wx_token', $token);
        session('wxid', Wechat::where(['token'=>$token])->value('id'));

    } elseif (input('token')) {
        session('wx_token', input('token'));
        session('wxid', Wechat::where(['token'=>input('token')])->value('id'));
        
    }

    $token = session('wx_token');
    if (empty($token)) {
        return null;
    }
    return $token;
}

/**
 * 取一个二维数组中的每个数组的固定的键知道的值来形成一个新的一维数组
 * @param $pArray 一个二维数组
 * @param $pKey 数组的键的名称
 * @return 返回新的一维数组
 */
function getSubByKey($pArray, $pKey = "", $pCondition = "")
{
    $result = [];
    if (is_array($pArray)) {
        foreach ($pArray as $temp_array) {
            if (is_object($temp_array)) {
                $temp_array = (array)$temp_array;
            }
            if (("" != $pCondition && $temp_array[$pCondition[0]] == $pCondition[1]) || "" == $pCondition) {
                $result[] = ("" == $pKey) ? $temp_array : isset($temp_array[$pKey]) ? $temp_array[$pKey] : "";
            }
        }
        return $result;
    } else {
        return false;
    }
}

/**
 * 微信端的错误码中文对照
 * @param  [type] $return [description]
 * @param  string $more_tips [description]
 * @return [type] [description]
 * @date   2017-08-22
 * @author 赵俊峰 <981248356@qq.com>
 */
function error_msg($return, $more_tips = '') {
    $msg = array (
            '-1' => '系统繁忙，此时请开发者稍候再试',
            '0' => '请求成功',
            '40001' => '获取access_token时AppSecret错误，或者access_token无效。请开发者认真比对AppSecret的正确性，或查看是否正在为恰当的公众号调用接口',
            '40002' => '不合法的凭证类型',
            '40003' => '不合法的OpenID，请开发者确认OpenID（该用户）是否已关注公众号，或是否是其他公众号的OpenID',
            '40004' => '不合法的媒体文件类型',
            '40005' => '不合法的文件类型',
            '40006' => '不合法的文件大小',
            '40007' => '不合法的媒体文件id',
            '40008' => '不合法的消息类型',
            '40009' => '不合法的图片文件大小',
            '40010' => '不合法的语音文件大小',
            '40011' => '不合法的视频文件大小',
            '40012' => '不合法的缩略图文件大小',
            '40013' => '不合法的AppID，请开发者检查AppID的正确性，避免异常字符，注意大小写',
            '40014' => '不合法的access_token，请开发者认真比对access_token的有效性（如是否过期），或查看是否正在为恰当的公众号调用接口',
            '40015' => '不合法的菜单类型',
            '40016' => '不合法的按钮个数',
            '40017' => '不合法的按钮个数',
            '40018' => '不合法的按钮名字长度',
            '40019' => '不合法的按钮KEY长度',
            '40020' => '不合法的按钮URL长度',
            '40021' => '不合法的菜单版本号',
            '40022' => '不合法的子菜单级数',
            '40023' => '不合法的子菜单按钮个数',
            '40024' => '不合法的子菜单按钮类型',
            '40025' => '不合法的子菜单按钮名字长度',
            '40026' => '不合法的子菜单按钮KEY长度',
            '40027' => '不合法的子菜单按钮URL长度',
            '40028' => '不合法的自定义菜单使用用户',
            '40029' => '不合法的oauth_code',
            '40030' => '不合法的refresh_token',
            '40031' => '不合法的openid列表',
            '40032' => '不合法的openid列表长度',
            '40033' => '不合法的请求字符，不能包含\uxxxx格式的字符',
            '40035' => '不合法的参数',
            '40038' => '不合法的请求格式',
            '40039' => '不合法的URL长度',
            '40050' => '不合法的分组id',
            '40051' => '分组名字不合法',
            '40117' => '分组名字不合法',
            '40118' => 'media_id大小不合法',
            '40119' => 'button类型错误',
            '40120' => 'button类型错误',
            '40121' => '不合法的media_id类型',
            '40132' => '微信号不合法',
            '40137' => '不支持的图片格式',
            '41001' => '缺少access_token参数',
            '41002' => '缺少appid参数',
            '41003' => '缺少refresh_token参数',
            '41004' => '缺少secret参数',
            '41005' => '缺少多媒体文件数据',
            '41006' => '缺少media_id参数',
            '41007' => '缺少子菜单数据',
            '41008' => '缺少oauth code',
            '41009' => '缺少openid',
            '42001' => 'access_token超时，请检查access_token的有效期，请参考基础支持-获取access_token中，对access_token的详细机制说明',
            '42002' => 'refresh_token超时',
            '42003' => 'oauth_code超时',
            '43001' => '需要GET请求',
            '43002' => '需要POST请求',
            '43003' => '需要HTTPS请求',
            '43004' => '需要接收者关注',
            '43005' => '需要好友关系',
            '44001' => '多媒体文件为空',
            '44002' => 'POST的数据包为空',
            '44003' => '图文消息内容为空',
            '44004' => '文本消息内容为空',
            '45001' => '多媒体文件大小超过限制',
            '45002' => '消息内容超过限制',
            '45003' => '标题字段超过限制',
            '45004' => '描述字段超过限制',
            '45005' => '链接字段超过限制',
            '45006' => '图片链接字段超过限制',
            '45007' => '语音播放时间超过限制',
            '45008' => '图文消息超过限制',
            '45009' => '接口调用超过限制',
            '45010' => '创建菜单个数超过限制',
            '45015' => '回复时间超过限制',
            '45016' => '系统分组，不允许修改',
            '45017' => '分组名字过长',
            '45018' => '分组数量超过上限',
            '46001' => '不存在媒体数据',
            '46002' => '不存在的菜单版本',
            '46003' => '不存在的菜单数据',
            '46004' => '不存在的用户',
            '47001' => '解析JSON/XML内容错误',
            '48001' => 'api功能未授权，请确认公众号已获得该接口，可以在公众平台官网-开发者中心页中查看接口权限',
            '50001' => '用户未授权该api',
            '50002' => '用户受限，可能是违规后接口被封禁',
            '61451' => '参数错误(invalid parameter)',
            '61452' => '无效客服账号(invalid kf_account)',
            '61453' => '客服帐号已存在(kf_account exsited)',
            '61454' => '客服帐号名长度超过限制(仅允许10个英文字符，不包括@及@后的公众号的微信号)(invalid kf_acount length)',
            '61455' => '客服帐号名包含非法字符(仅允许英文+数字)(illegal character in kf_account)',
            '61456' => '客服帐号个数超过限制(10个客服账号)(kf_account count exceeded)',
            '61457' => '无效头像文件类型(invalid file type)',
            '61450' => '系统错误(system error)',
            '61500' => '日期格式错误',
            '61501' => '日期范围错误',
            '9001001' => 'POST数据参数不合法',
            '9001002' => '远端服务不可用',
            '9001003' => 'Ticket不合法',
            '9001004' => '获取摇周边用户信息失败',
            '9001005' => '获取商户信息失败',
            '9001006' => '获取OpenID失败',
            '9001007' => '上传文件缺失',
            '9001008' => '上传素材的文件类型不合法',
            '9001009' => '上传素材的文件尺寸不合法',
            '9001010' => '上传失败',
            '9001020' => '帐号不合法',
            '9001021' => '已有设备激活率低于50%，不能新增设备',
            '9001022' => '设备申请数不合法，必须为大于0的数字',
            '9001023' => '已存在审核中的设备ID申请',
            '9001024' => '一次查询设备ID数量不能超过50',
            '9001025' => '设备ID不合法',
            '9001026' => '页面ID不合法',
            '9001027' => '页面参数不合法',
            '9001028' => '一次删除页面ID数量不能超过10',
            '9001029' => '页面已应用在设备中，请先解除应用关系再删除',
            '9001030' => '一次查询页面ID数量不能超过50',
            '9001031' => '时间区间不合法',
            '9001032' => '保存设备与页面的绑定关系参数错误',
            '9001033' => '门店ID不合法',
            '9001034' => '设备备注信息过长',
            '9001035' => '设备申请参数不合法',
            '9001036' => '查询起始值begin不合法' 
    );
    
    if ($more_tips) {
        $res = $more_tips . ': ';
    } else {
        $res = '';
    }
    if (isset ( $msg [$return ['errcode']] )) {
        $res .= $msg [$return ['errcode']];
    } else {
        $res .= $return ['errmsg'];
    }
    
    $res .= ', 返回码：' . $return ['errcode'];
    
    return $res;
}